from django.shortcuts import render,redirect,reverse,HttpResponse
# 导入用户类
from userweb.models import Login, Role, Permission
# 引入Q查询
from django.db.models import Q
# 导入jSONResponse
from django.http import JsonResponse
# 导入字符串加密
from utils import encrypt
# 导入时间日期
from datetime import datetime
# 导入权限的初始化
from rbacweb.service.init_permission import init_permission


def index(request):
    return render(request, 'user/login.html')


def login_handle(request):
    """处理用户登陆"""
    # 接收传递的值
    loginid = request.POST.get('loginid')
    loginpwd = request.POST.get('loginpwd')

    # 定义返回值的数据结构
    res = {'status': True}
    # 开始验证
    try:
        # 获取当前Id的用户
        objs = Login.objects.filter(Q(loginid=loginid) | Q(mobile=loginid) | Q(email=loginid))
        # 判断是否存在
        if not objs:
            return JsonResponse({'code': 1, 'error': "当前登陆账号不存在！"})
        # 判断用户是否被禁用
        if not objs[0].status:
            return JsonResponse({'code': 2, 'error': "当前用户已禁用！"})
        # 验证密码
        obj = objs.filter(loginpwd=encrypt.md5(loginpwd)).first()
        if not obj:
            return JsonResponse({'code': 3, 'error': "登陆密码错误！"})

        # ===== 身份验证成功 ===
        # 1. 替换当前的上次登陆时间
        obj.last_login = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        obj.save()
        obj_dict = {'id': obj.loginid, 'name':obj.name, 'mobile':obj.mobile, 'email': obj.email, 'status':obj.status }
        # 设置session
        request.session['user'] = obj_dict

        # 初始化权限和菜单
        init_permission(request,obj)

        # 2. 直接返回
        return JsonResponse({'code': 0})

    except Exception as e:
        return JsonResponse({'code': -1, 'error': "身份验证出现异常，具体原因：" + str(e)})



def logout_handle(request):
    """清除当前的session"""
    request.session.flush()
    return redirect(reverse('login'))



